package com.category.douyijia.dao;

import java.util.ArrayList;
import java.util.List;

import com.category.douyijia.model.UserLoginState;
import com.jfinal.aop.Aop;
import com.jfinal.kit.StrKit;

/**
 * 用于保存用户登录状态，
 * 最终保存在数据库中，
 * 在service层
 * 和controller层通过redis缓存进行保存，
 * 保存时长超过3天时写入到MySQL中保存
 * @author JunfengLiu
 * 
 */
public class UserLoginStateDao {
	/**
	 * 设置登录状态IOC对象
	 */
	private UserLoginState userLoginState = Aop.get(UserLoginState.class);
	/**
	 * 保存用户登录状态的list集合
	 */
	private List<UserLoginState> userLoginStateList = new ArrayList<UserLoginState>();
	/**
	 * 设置结果
	 */
	private boolean result = false;
	/**
	 * 通过用户ID查找用户登录状态
	 * @param userId
	 * 用户ID
	 * @return
	 * 登录状态信息
	 */
	public UserLoginState selectByUserId(String userId){
		if (!(StrKit.isBlank(userId))) {
			userLoginState = userLoginState.dao().findFirst("select * from "
									+ "t_user_login_state where "
									+ "user_login_id = ? ", userId);
		}
		return userLoginState;
	}
	/**
	 * 查找所有在线成员信息
	 * @return
	 * 在线人员信息集合
	 */
	public List<UserLoginState> selectAllOnLineState(){
		userLoginStateList = userLoginState.dao().find("select * from "
				+ "t_user_login_state where "
				+ "user_login_state = 1 ");
		return userLoginStateList;
	}
	/**
	 * 查找所有里离线人员信息
	 * @return
	 * 离线人员信息集合
	 */
	public List<UserLoginState> selectAllLoginoutState(){
		userLoginStateList = userLoginState.dao().find("select * from "
				+ "t_user_login_state where "
				+ "user_login_state = 0 ");
		return userLoginStateList;
	}
	/**
	 * 查找所有登录状态信息
	 * @return
	 * 登录状态信息集合
	 */
	public List<UserLoginState> selectAll(){
		userLoginStateList = userLoginState.dao().findAll();
		return userLoginStateList;
	}
	/**
	 * 通过用户ID添加用户登录状态，
	 * 仅限大于三天的登录
	 * @param userId
	 * 用户ID
	 * @param loginState
	 * 登录状态对象
	 * @return
	 * 添加结果
	 */
	public boolean insertUserStateByUserId(String userId,UserLoginState loginState){
		if (!(StrKit.isBlank(userId)) 
				&& 
			loginState != null 
				&& 
			loginState.getUserLoginId().equals(userId)) {
			result = userLoginState.dao()._setAttrs(loginState).save();
		}
		return result;
	}
	/**
	 * 通过用户ID更新用户登录状态信息
	 * @param userId
	 * 用户ID
	 * @param loginstate
	 * 登录状态信息
	 * @return
	 * 更新结果
	 */
	public boolean updateLoginStateMessageByUserId(String userId,UserLoginState loginstate){
		userLoginState = selectByUserId(userId);
		if (userLoginState != null 
				&& 
			userLoginState != loginstate
				&&
			userId.equals(loginstate.getUserLoginId())) {
			result = userLoginState.dao()._setAttrs(loginstate).update();
		}
		return result;
	}
	/**
	 * 通过用户ID改变用户状态为登录
	 * @param userId
	 * 用户ID
	 * @return
	 * 更新结果
	 */
	public boolean updateToLoginStateByUserId(String userId){
		if (!StrKit.isBlank(userId)) {
			userLoginState = selectByUserId(userId);
		}
		if (userLoginState != null) {
			result = userLoginState.dao().set("userLoginState", 1).update();
		}
		return result;
	}
	/**
	 * 通过用户ID停用登录状态
	 * @param userId
	 * 用户ID
	 * @return
	 */
	public boolean updateToLogoutStateByUserId(String userId){
		if (!StrKit.isBlank(userId)) {
			userLoginState = selectByUserId(userId);
		}
		if (userLoginState != null) {
			result = userLoginState.dao().set("userLoginState", 0).update();
		}
		return result;
	}
	/**
	 * 删除登录状态
	 * @param userId
	 * 用户ID
	 * @return
	 * 返回删除结果
	 */
	public boolean deleteLoginStateByUserId(String userId){
		userLoginState = selectByUserId(userId);
		
		if (userLoginState != null) {
			int id = userLoginState.getId();
			result = userLoginState.dao().deleteById(id);
		}
		return result;
	}
}
